/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.karla.webservices;

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;

import java.io.File;
import java.util.Scanner;
import java.util.Set;

import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLDataFactory;
import org.semanticweb.owlapi.model.OWLNamedIndividual;
import org.semanticweb.owlapi.model.OWLObjectProperty;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.semanticweb.owlapi.reasoner.BufferingMode;
import org.semanticweb.owlapi.reasoner.ConsoleProgressMonitor;
import org.semanticweb.owlapi.reasoner.NodeSet;
import org.semanticweb.owlapi.reasoner.OWLReasonerConfiguration;
import org.semanticweb.owlapi.reasoner.SimpleConfiguration;

import uk.ac.manchester.cs.factplusplus.owlapiv3.FaCTPlusPlusReasoner;

/**
 *
 * @author usuario
 */
@WebService(serviceName = "ConsultaModulo")
public class ConsultaModulo {

    /**
     * This is a sample web service operation
     */
    @WebMethod(operationName = "ConsultaTemas")
    public String ConsultaTemas(@WebParam(name = "teclado2") String teclado2) throws Exception {
         String tema=" ";
         String var=" ";
        
        
        try {
			// Create our ontology manager in the usual way.
			OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

			// Este codigo carga la ontologia desde un archivo local
			File file = new File("C:\\OntoDominio.owl");
			OWLOntology ont = manager.loadOntologyFromOntologyDocument(file);
			System.out.println("Ontologia cargada " + ont.getOntologyID());
			System.out.println("\n");

			FaCTPlusPlusReasoner reasoner = new FaCTPlusPlusReasoner(ont,
					new SimpleConfiguration(), BufferingMode.BUFFERING);

			OWLDataFactory fac = manager.getOWLDataFactory();
			
//			Scanner peticion = new Scanner(System.in);
			System.out.println("Por favor introduzca el Nombre Modulo:");

//			teclado = peticion.next();

			OWLNamedIndividual mod = fac
					.getOWLNamedIndividual(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#"
									+ teclado2));

			OWLObjectProperty elModuloTieneTemas = fac
					.getOWLObjectProperty(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#elModuloTieneTemas"));
			
			NodeSet<OWLNamedIndividual> temasModulo = reasoner
					.getObjectPropertyValues(mod,
							elModuloTieneTemas);
			
			Set<OWLNamedIndividual> values = temasModulo.getFlattened();
			System.out.println("El Modulo tiene el siguiente listado de Pre Requisitos: ");
			for (OWLNamedIndividual ind : values) {
				// System.out.println(pm.getShortForm(values) + ind);
				tema = ind.toStringID();
                                
                                var=var+"    "+tema+";";
                                
				// TODO: tema.replace("_", " ");

//				System.out.println("    " + tema.substring(73));
				// escritura

				// OWLDataFactory factory = manager.getOWLDataFactory();
				// OWLIndividual john =
				// factory.getOWLNamedIndividual(IRI.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#Tema"
				// + "#Juan"));}
				//
				// File output = File.createTempFile("saved_pizza", "owl");
				// IRI documentIRI2 = IRI.create(output);
				// manager.saveOntology(ont, new OWLXMLOntologyFormat(),
				// documentIRI2);
				System.out.println("\n");
				// Notese que Mick tiene una mascota Rex, lo cual no esta
				// escrito en
				// el Abos de la ontologia
				// Finalmente se imprime la jerarquia de clases haciendo uso del
				// nodo del tope (topNode) en la jerarquia de clases
				// (conteniendo
				// owl:Thing)
				// Luego se imprime la jerarquia

				

			}
		}

		catch (UnsupportedOperationException exception) {
			System.out.println("Unsupported reasoner operation.");
//		} catch (OWLOntologyCreationException e) {
//			System.out.println("Could not load the pizza ontology: "
//					+ e.getMessage());
//		}
        
        
    }
       var=var.replace("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#","\n");
       var=var.replace("_"," ");
        return var;
        
}
        

//******************************** PRE REQUISITOS**********************
    /**
     * Web service operation
     */
    @WebMethod(operationName = "ConsultaPrerequisitos")
     public String ConsultaPrerequisitos(@WebParam(name = "teclado2") String teclado2) throws Exception {
         String tema=" ";
         String var=" ";
        
        
        try {
			// Create our ontology manager in the usual way.
			OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

			// Este codigo carga la ontologia desde un archivo local
			File file = new File("C:\\OntoDominio.owl");
			OWLOntology ont = manager.loadOntologyFromOntologyDocument(file);
			System.out.println("Ontologia cargada " + ont.getOntologyID());
			System.out.println("\n");

			FaCTPlusPlusReasoner reasoner = new FaCTPlusPlusReasoner(ont,
					new SimpleConfiguration(), BufferingMode.BUFFERING);

			OWLDataFactory fac = manager.getOWLDataFactory();
			
//			Scanner peticion = new Scanner(System.in);
			System.out.println("Por favor introduzca el Nombre Modulo:");

//			teclado = peticion.next();

			OWLNamedIndividual mod = fac
					.getOWLNamedIndividual(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#"
									+ teclado2));

			OWLObjectProperty elModuloTienePreRequisitos = fac
					.getOWLObjectProperty(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#elModuloTienePreRequisitos"));
			
			NodeSet<OWLNamedIndividual> prerequisitosModulo = reasoner
					.getObjectPropertyValues(mod,
							elModuloTienePreRequisitos);
			
			Set<OWLNamedIndividual> values = prerequisitosModulo.getFlattened();
			System.out.println("El Modulo tiene el siguiente listado de Pre Requisitos: ");
			for (OWLNamedIndividual ind : values) {
				// System.out.println(pm.getShortForm(values) + ind);
				tema = ind.toStringID();
                                
                                var=var+"    "+tema+";";
                                
				// TODO: tema.replace("_", " ");

//				System.out.println("    " + tema.substring(73));
				// escritura

				// OWLDataFactory factory = manager.getOWLDataFactory();
				// OWLIndividual john =
				// factory.getOWLNamedIndividual(IRI.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#Tema"
				// + "#Juan"));}
				//
				// File output = File.createTempFile("saved_pizza", "owl");
				// IRI documentIRI2 = IRI.create(output);
				// manager.saveOntology(ont, new OWLXMLOntologyFormat(),
				// documentIRI2);
				System.out.println("\n");
				// Notese que Mick tiene una mascota Rex, lo cual no esta
				// escrito en
				// el Abos de la ontologia
				// Finalmente se imprime la jerarquia de clases haciendo uso del
				// nodo del tope (topNode) en la jerarquia de clases
				// (conteniendo
				// owl:Thing)
				// Luego se imprime la jerarquia

				

			}
		}

		catch (UnsupportedOperationException exception) {
			System.out.println("Unsupported reasoner operation.");
//		} catch (OWLOntologyCreationException e) {
//			System.out.println("Could not load the pizza ontology: "
//					+ e.getMessage());
//		}
        
        
    }
       var=var.replace("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#","\n");
       var=var.replace("_"," ");
        return var;
        
}

   //******************************** PERFIL**********************
    /**
     * Web service operation
     */
    @WebMethod(operationName = "ConsultaPerfil")
     public String ConsultaPerfil(@WebParam(name = "teclado2") String teclado2) throws Exception {
         String tema=" ";
         String var=" ";
        
        
        try {
			// Create our ontology manager in the usual way.
			OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

			// Este codigo carga la ontologia desde un archivo local
			File file = new File("C:\\OntoDominio.owl");
			OWLOntology ont = manager.loadOntologyFromOntologyDocument(file);
			System.out.println("Ontologia cargada " + ont.getOntologyID());
			System.out.println("\n");

			FaCTPlusPlusReasoner reasoner = new FaCTPlusPlusReasoner(ont,
					new SimpleConfiguration(), BufferingMode.BUFFERING);

			OWLDataFactory fac = manager.getOWLDataFactory();
			
//			Scanner peticion = new Scanner(System.in);
			System.out.println("Por favor introduzca el Nombre Modulo:");

//			teclado = peticion.next();

			OWLNamedIndividual mod = fac
					.getOWLNamedIndividual(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#"
									+ teclado2));

			OWLObjectProperty elModuloTienePerfil = fac
					.getOWLObjectProperty(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#elModuloTienePerfil"));
			
			NodeSet<OWLNamedIndividual> perfilModulo = reasoner
					.getObjectPropertyValues(mod,
							elModuloTienePerfil);
			
			Set<OWLNamedIndividual> values = perfilModulo.getFlattened();
			System.out.println("El Modulo tiene el siguiente listado de Pre Requisitos: ");
			for (OWLNamedIndividual ind : values) {
				// System.out.println(pm.getShortForm(values) + ind);
				tema = ind.toStringID();
                                
                                var=var+"    "+tema+";";
                                
				// TODO: tema.replace("_", " ");

//				System.out.println("    " + tema.substring(73));
				// escritura

				// OWLDataFactory factory = manager.getOWLDataFactory();
				// OWLIndividual john =
				// factory.getOWLNamedIndividual(IRI.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#Tema"
				// + "#Juan"));}
				//
				// File output = File.createTempFile("saved_pizza", "owl");
				// IRI documentIRI2 = IRI.create(output);
				// manager.saveOntology(ont, new OWLXMLOntologyFormat(),
				// documentIRI2);
				System.out.println("\n");
				// Notese que Mick tiene una mascota Rex, lo cual no esta
				// escrito en
				// el Abos de la ontologia
				// Finalmente se imprime la jerarquia de clases haciendo uso del
				// nodo del tope (topNode) en la jerarquia de clases
				// (conteniendo
				// owl:Thing)
				// Luego se imprime la jerarquia

				

			}
		}

		catch (UnsupportedOperationException exception) {
			System.out.println("Unsupported reasoner operation.");
//		} catch (OWLOntologyCreationException e) {
//			System.out.println("Could not load the pizza ontology: "
//					+ e.getMessage());
//		}
        
        
    }
       var=var.replace("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#","\n");
       var=var.replace("_"," ");
        return var;
        
}

    //******************************** CODIGO **********************
    /**
     * Web service operation
     */
    @WebMethod(operationName = "ConsultaCodigo")
     public String ConsultaCodigo(@WebParam(name = "teclado2") String teclado2) throws Exception {
         String tema=" ";
         String var=" ";
        
        
        try {
			// Create our ontology manager in the usual way.
			OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

			// Este codigo carga la ontologia desde un archivo local
			File file = new File("C:\\OntoDominio.owl");
			OWLOntology ont = manager.loadOntologyFromOntologyDocument(file);
			System.out.println("Ontologia cargada " + ont.getOntologyID());
			System.out.println("\n");

			FaCTPlusPlusReasoner reasoner = new FaCTPlusPlusReasoner(ont,
					new SimpleConfiguration(), BufferingMode.BUFFERING);

			OWLDataFactory fac = manager.getOWLDataFactory();
			
//			Scanner peticion = new Scanner(System.in);
			System.out.println("Por favor introduzca el Nombre Modulo:");

//			teclado = peticion.next();

			OWLNamedIndividual mod = fac
					.getOWLNamedIndividual(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#"
									+ teclado2));

			OWLObjectProperty elModuloTieneCodigo = fac
					.getOWLObjectProperty(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#elModuloTieneCodigo"));
			
			NodeSet<OWLNamedIndividual> codigoModulo = reasoner
					.getObjectPropertyValues(mod,
							elModuloTieneCodigo);
			
			Set<OWLNamedIndividual> values = codigoModulo.getFlattened();
			System.out.println("El Modulo tiene el siguiente listado de Pre Requisitos: ");
			for (OWLNamedIndividual ind : values) {
				// System.out.println(pm.getShortForm(values) + ind);
				tema = ind.toStringID();
                                
                                var=var+"    "+tema+";";
                                
				// TODO: tema.replace("_", " ");

//				System.out.println("    " + tema.substring(73));
				// escritura

				// OWLDataFactory factory = manager.getOWLDataFactory();
				// OWLIndividual john =
				// factory.getOWLNamedIndividual(IRI.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#Tema"
				// + "#Juan"));}
				//
				// File output = File.createTempFile("saved_pizza", "owl");
				// IRI documentIRI2 = IRI.create(output);
				// manager.saveOntology(ont, new OWLXMLOntologyFormat(),
				// documentIRI2);
				System.out.println("\n");
				// Notese que Mick tiene una mascota Rex, lo cual no esta
				// escrito en
				// el Abos de la ontologia
				// Finalmente se imprime la jerarquia de clases haciendo uso del
				// nodo del tope (topNode) en la jerarquia de clases
				// (conteniendo
				// owl:Thing)
				// Luego se imprime la jerarquia

				

			}
		}

		catch (UnsupportedOperationException exception) {
			System.out.println("Unsupported reasoner operation.");
//		} catch (OWLOntologyCreationException e) {
//			System.out.println("Could not load the pizza ontology: "
//					+ e.getMessage());
//		}
        
        
    }
       var=var.replace("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#","\n");
       var=var.replace("_"," ");
        return var;
        
}

     //******************************** HORAS **********************
    /**
     * Web service operation
     */
    @WebMethod(operationName = "ConsultaHoras")
     public String ConsultaHoras(@WebParam(name = "teclado2") String teclado2) throws Exception {
         String tema=" ";
         String var=" ";
        
        
        try {
			// Create our ontology manager in the usual way.
			OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

			// Este codigo carga la ontologia desde un archivo local
			File file = new File("C:\\OntoDominio.owl");
			OWLOntology ont = manager.loadOntologyFromOntologyDocument(file);
			System.out.println("Ontologia cargada " + ont.getOntologyID());
			System.out.println("\n");

			FaCTPlusPlusReasoner reasoner = new FaCTPlusPlusReasoner(ont,
					new SimpleConfiguration(), BufferingMode.BUFFERING);

			OWLDataFactory fac = manager.getOWLDataFactory();
			
//			Scanner peticion = new Scanner(System.in);
			System.out.println("Por favor introduzca el Nombre Modulo:");

//			teclado = peticion.next();

			OWLNamedIndividual mod = fac
					.getOWLNamedIndividual(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#"
									+ teclado2));

			OWLObjectProperty elModuloTieneHoras= fac
					.getOWLObjectProperty(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#elModuloTieneHoras"));
			
			NodeSet<OWLNamedIndividual> horasModulo = reasoner
					.getObjectPropertyValues(mod,
							elModuloTieneHoras);
			
			Set<OWLNamedIndividual> values = horasModulo.getFlattened();
			System.out.println("El Modulo tiene el siguiente listado de Pre Requisitos: ");
			for (OWLNamedIndividual ind : values) {
				// System.out.println(pm.getShortForm(values) + ind);
				tema = ind.toStringID();
                                
                                var=var+"    "+tema+";";
                                
				// TODO: tema.replace("_", " ");

//				System.out.println("    " + tema.substring(73));
				// escritura

				// OWLDataFactory factory = manager.getOWLDataFactory();
				// OWLIndividual john =
				// factory.getOWLNamedIndividual(IRI.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#Tema"
				// + "#Juan"));}
				//
				// File output = File.createTempFile("saved_pizza", "owl");
				// IRI documentIRI2 = IRI.create(output);
				// manager.saveOntology(ont, new OWLXMLOntologyFormat(),
				// documentIRI2);
				System.out.println("\n");
				// Notese que Mick tiene una mascota Rex, lo cual no esta
				// escrito en
				// el Abos de la ontologia
				// Finalmente se imprime la jerarquia de clases haciendo uso del
				// nodo del tope (topNode) en la jerarquia de clases
				// (conteniendo
				// owl:Thing)
				// Luego se imprime la jerarquia

				

			}
		}

		catch (UnsupportedOperationException exception) {
			System.out.println("Unsupported reasoner operation.");
//		} catch (OWLOntologyCreationException e) {
//			System.out.println("Could not load the pizza ontology: "
//					+ e.getMessage());
//		}
        
        
    }
       var=var.replace("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#","\n");
       var=var.replace("_"," ");
        return var;
        
}

      //******************************** NIVEL DE FORMACION **********************
    /**
     * Web service operation
     */
    @WebMethod(operationName = "ConsultaNivelFormacion")
     public String ConsultaNivelFormacion(@WebParam(name = "teclado2") String teclado2) throws Exception {
         String tema=" ";
         String var=" ";
        
        
        try {
			// Create our ontology manager in the usual way.
			OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

			// Este codigo carga la ontologia desde un archivo local
			File file = new File("C:\\OntoDominio.owl");
			OWLOntology ont = manager.loadOntologyFromOntologyDocument(file);
			System.out.println("Ontologia cargada " + ont.getOntologyID());
			System.out.println("\n");

			FaCTPlusPlusReasoner reasoner = new FaCTPlusPlusReasoner(ont,
					new SimpleConfiguration(), BufferingMode.BUFFERING);

			OWLDataFactory fac = manager.getOWLDataFactory();
			
//			Scanner peticion = new Scanner(System.in);
			System.out.println("Por favor introduzca el Nombre Modulo:");

//			teclado = peticion.next();

			OWLNamedIndividual mod = fac
					.getOWLNamedIndividual(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#"
									+ teclado2));

			OWLObjectProperty elModuloTieneNivel= fac
					.getOWLObjectProperty(IRI
							.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#elModuloTieneNivel"));
			
			NodeSet<OWLNamedIndividual> nivelModulo = reasoner
					.getObjectPropertyValues(mod,
							elModuloTieneNivel);
			
			Set<OWLNamedIndividual> values = nivelModulo.getFlattened();
			System.out.println("El Modulo tiene el siguiente listado de Pre Requisitos: ");
			for (OWLNamedIndividual ind : values) {
				// System.out.println(pm.getShortForm(values) + ind);
				tema = ind.toStringID();
                                
                                var=var+"    "+tema+";";
                                
				// TODO: tema.replace("_", " ");

//				System.out.println("    " + tema.substring(73));
				// escritura

				// OWLDataFactory factory = manager.getOWLDataFactory();
				// OWLIndividual john =
				// factory.getOWLNamedIndividual(IRI.create("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#Tema"
				// + "#Juan"));}
				//
				// File output = File.createTempFile("saved_pizza", "owl");
				// IRI documentIRI2 = IRI.create(output);
				// manager.saveOntology(ont, new OWLXMLOntologyFormat(),
				// documentIRI2);
				System.out.println("\n");
				// Notese que Mick tiene una mascota Rex, lo cual no esta
				// escrito en
				// el Abos de la ontologia
				// Finalmente se imprime la jerarquia de clases haciendo uso del
				// nodo del tope (topNode) en la jerarquia de clases
				// (conteniendo
				// owl:Thing)
				// Luego se imprime la jerarquia

				

			}
		}

		catch (UnsupportedOperationException exception) {
			System.out.println("Unsupported reasoner operation.");
//		} catch (OWLOntologyCreationException e) {
//			System.out.println("Could not load the pizza ontology: "
//					+ e.getMessage());
//		}
        
        
    }
       var=var.replace("http://www.semanticweb.org/usuario/ontologies/2013/3/ontologiadedominio#","\n");
       var=var.replace("_"," ");
        return var;
        
}


}
